//在字符串 s 中找出第一个只出现一次的字符。如果没有，返回一个单空格。 s 只包含小写字母。 
//
// 示例: 
//
// s = "abaccdeff"
//返回 "b"
//
//s = "" 
//返回 " "
// 
//
// 
//
// 限制： 
//
// 0 <= s 的长度 <= 50000 
// Related Topics 哈希表 
// 👍 41 👎 0

package leetcode.editor.cn;

import common.util.MyUtil;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * Java：第一个只出现一次的字符
 *
 * @author changgui
 */
@SuppressWarnings("all")
public class P剑指_offer_50_DiYiGeZhiChuXianYiCiDeZiFuLcof {
    public static void main(String[] args) {
        Solution solution = new P剑指_offer_50_DiYiGeZhiChuXianYiCiDeZiFuLcof().new Solution();
        MyUtil.print(solution.firstUniqChar("leetcode"));
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public char firstUniqChar(String s) {
            if (s == null || s == "") {
                return ' ';
            }
            Integer flag = 0;
            Map<Character, Integer> multipleMap = new HashMap<>();
            Map<Character, Integer> onceMap = new LinkedHashMap<>();

            for (char c : s.toCharArray()) {
                if (flag.equals(multipleMap.get(c))) {
                    continue;
                }
                if (flag.equals(onceMap.get(c))) {
                    onceMap.remove(c);
                    multipleMap.put(c, flag);
                    continue;
                }
                onceMap.put(c, flag);
            }
            return onceMap.isEmpty() ? ' ' : onceMap.entrySet().iterator().next().getKey();

        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}